﻿class PulicCommon {
    constructor(options = {})
    {
        this.apiBaseUrl = options.apiBase || '/api';
        this.isChecking = false;
    }

    /**
     * 授权检查（所有前台html页面都调用此语句），前台入口程序；
     * @param {string} currentUrl 当前网页
     */
    async checkAuth(currentUrl = 'index.html') {
        try {
            // 检测微信环境
            const isWeChat = this.isWeChatBrowser();

            //微信类型
            console.log("detectWechatEnvironment:" + this.detectWechatEnvironment());
             

            // 如果正在检查中，避免重复执行
            if (this.isChecking) {
                console.log("认证检查正在进行中...");
                this.showError("认证检查正在进行中");
                return;
            }

            this.isChecking = true;

            //非微信环境【直接】
            if (!(isWeChat))
            {
                return await this.redirectToWeChatAuth(currentUrl);
            }



            if (this.hasWeixinCookie())
            {
                //授权后，则存储用户信息；否则引导授权；[]
                //return await this.checkAuthStatus(currentUrl);

                const data = localStorage.getItem('user_info');

                

                console.log("---data:" + data);


               // if (data) this.user = JSON.parse(data);


            }
            else {
                //重定向授权；
                return await this.redirectToWeChatAuth(currentUrl);
            }

       

            //if (isWeChat) {
            //    console.log("isWeChat:" + isWeChat);
            //    //检查cookie【】
            //    return await this.redirectToWeChatAuth(currentUrl);
            //}
            //else {
            //    console.log("isWeChat:" + isWeChat);
            //    return await this.redirectToWeChatAuth(currentUrl);
            //}



        }
        catch (error) {
            console.log("checkAuth--------------------" + error);
            this.showError("-------------" + error.message);
            throw error.message;
        }
        finally {
            // 清理状态
            setTimeout(() => {
                this.isChecking = false;
            }, 1000); // 1秒内防止重复请求

        }
    }


    //后台检查认证状态
    async checkAuthStatus(currentUrl) {

        try {
            const response = await fetch(`${this.apiBaseUrl}/auth/check-session`, {
                credentials: 'include',
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json'
                }
            });

            if (!response.ok) {
                console.log("21=============");
                throw new Error(`HTTP error! status: ${response.status}`);
            }

            const result = await response.json();

            if (result.authenticated)
            {
                //保存用户信息；
                sessionStorage.setItem('user_info', JSON.stringify(result.user));
            }
            else
            {
                return await this.redirectToWeChatAuth(currentUrl);
            }
        } catch (error) {
            console.error('检查认证状态失败:', error);
        } 

    }


    // 重定向到微信授权[时间较长]
    async redirectToWeChatAuth(currentUrl)
    {
        try
        {
            console.log("生成授权redirectToWeChatAuth，当前页面: {CurrentUrl}", currentUrl);
            const response = await fetch(`${this.apiBaseUrl}/auth/auth-url?returnUrl=${encodeURIComponent(currentUrl)}`, {
                credentials: 'include',
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json'
                }
            });

            if (!response.ok)
            {
                const errorText = await response.text();
                console.log("获取授权URL失败,response.status:" + response.status );

                throw new Error(`获取授权URL失败: ${response.status}, ${errorText}`);
            }

            const result = await response.json();

            if (result.url)
            {
                console.log("-------------result.url:" + result.url);
                window.location.href = result.url;
            }
            else
            {
                throw new Error("获取授权URL失败");
            }
        }
        catch (error)
        {
            console.error('跳转授权失败:', error);
            throw new Error("获取授权URL失败:" + error.message);
            
        }
    }


    hasWeixinCookie() {
        return document.cookie.includes('ltweixin_session=');
    }
 
    /**
     * 检测微信浏览器
     */
    isWeChatBrowser() {
        return /MicroMessenger/i.test(navigator.userAgent);
    }

    /**
    * 检测微信环境
    */
    detectWechatEnvironment()
    {
        const ua = navigator.userAgent;

        // 判断是否为微信环境
        if (!/MicroMessenger/i.test(ua)) {
            return '0';
        }

        // 在微信环境内，进一步判断设备类型
        if (/mobile/i.test(ua)) {
            return 'm';
        } else if (/windows/i.test(ua)) {
            return 'p';
        } else {
            // 其他可能的设备类型，如平板等，可根据需要扩展
            return '1';
        }


    }
    /**
     * 显示错误信息
     */
    showError(message) {
        // 可以使用Toast、Alert等方式显示错误
        alert('出错了:'+message);
        console.error('出错了:', message);
    }

 
}

// 创建全局实例
window.pulicCommon = new PulicCommon();

